﻿//using System;
//using System.Globalization;
//using System.Threading;
//using System.Collections.Generic;
//using System.Linq;
//using Microsoft.Xna.Framework;
//using Microsoft.Xna.Framework.Audio;
//using Microsoft.Xna.Framework.Content;
//using Microsoft.Xna.Framework.GamerServices;
//using Microsoft.Xna.Framework.Graphics;
//using Microsoft.Xna.Framework.Input;
//using Microsoft.Xna.Framework.Media;
//using System.Xml;
//using System.Reflection;
//using ebookreader.Resources;
//using ebookreader;
//using System.IO;
//using System.IO.IsolatedStorage;

//namespace ebookreader
//{
//    enum TextPos
//    {
//        Center,
//        Right,
//        Left
//    }
//    class OptionsButton
//    {
//        public String text;
//        public SpriteFont font;
//        public Vector2 position;
//        public Color textColor;
//        public Color textureColor;
//        Texture2D texture;
//        public Rectangle rectangle;
//        public bool enabled;
//        public float textScale;
//        public int index;
//        public TextPos textPos;
//        public OptionsButton(Rectangle rectangle, String text, Color textColor, SpriteFont font, TextPos textPos, Texture2D texture, Color textureColor)
//        {

//            this.textColor = textColor;
//            this.font = font;
//            this.text = text;
//            this.rectangle = rectangle;
//            this.texture = texture;
//            this.textureColor = textureColor;
//            this.enabled = true;
//            textScale = 1;
//            this.textPos = textPos;
//            if (textPos == TextPos.Center)
//            {
//                position = OptionsMenu.centerString(rectangle, text, font, textScale);
//            }
//            else if (textPos == TextPos.Left)
//            {
//                position = OptionsMenu.centerString(rectangle, text, font, textScale);
//                position.X = rectangle.X + 5;
//            }
//            else
//                if (textPos == TextPos.Right)
//                {
//                    position = OptionsMenu.centerString(rectangle, text, font, textScale);
//                    position.X = rectangle.X + rectangle.Width - 5 - font.MeasureString(text).Length();
//                }
//        }
//        public OptionsButton(Rectangle rectangle, String text, Color textColor, SpriteFont font)
//            : this(rectangle, text, textColor, font, TextPos.Center, null, Color.Transparent)
//        { }
//        public OptionsButton(Rectangle rectangle, String text, Color textColor, SpriteFont font, TextPos textPos)
//            : this(rectangle, text, textColor, font, textPos, null, Color.Transparent)
//        {
            
//        }
//        public OptionsButton(Rectangle rectangle, Texture2D texture, Color textureColor)
//            : this(rectangle, "", Color.Transparent, null, TextPos.Center, texture, textureColor)
//        { }
//        public void Draw(SpriteBatch batch)
//        {
//            if (!enabled)
//                return;
//            //position = OptionsMenu.centerString(rectangle, text, font, textScale);
//            if (texture != null)
//                batch.Draw(texture, rectangle, textureColor);
//            if (font != null)
//                batch.DrawString(font, text, position, textColor, 0, Vector2.Zero, textScale, SpriteEffects.None, 1);
//        }
//        public bool tapped_on(Point p)
//        {
//            return enabled && rectangle.Contains(p);
//        }
//    }

//    class SavedOptions
//    {
//        public int font;

//        public int scale;
//        public bool soundEnabled;
//        public SavedOptions()
//        {
//            font = 0;
//            scale = 0;
//            soundEnabled = false;
//        }
//    }

//    class OptionsMenu : Menu
//    {
//        //MyButton title;

//        SavedOptions savedOptions;

//        SpriteFont extralarge, large, medium, small;
//        //InputManager input_manager;
//        //SpriteBatch spriteBatch;

//        OptionsButton back, title;
//        OptionsButton soundStatus, reset_b;
//        OptionsButton prevFont, nextFont, prevDim, nextDim;
//        OptionsButton soundText;
//        OptionsButton previewArea;
//        OptionsButton previewTitle;
//        List<SpriteFont> fonts;
//        List<String> dims; 
//        OptionsButton font_title, dim_title, reset_title;
//        List<OptionsButton> fonts_b;
//        List<OptionsButton> dims_b;
//        //DragType current_drag;
//        Texture2D whiteTexture, boxTexture;

//        //int titles_y = 200;
//        //int titles_h = 50;
//        //int font_x = 25;
//        //int tcolor_x = 225;
//        //int bgcolor_x = 425;
//        //int scale_x = 625;
//        //int buttons_w = 150;
//        //int buttons_h = 70;
//        //int buttons_y = 280;

//        Rectangle blackRectangle;

//        public OptionsMenu(Game game)
//            : base(game)
//        {
//        }
//        public override void Initialize()
//        {
//            sprite_batch = Game.Services.GetService(typeof(SpriteBatch)) as SpriteBatch;
//            Game.Services.RemoveService(typeof(IInputManager));

//            Game.Components.Add( new InputManager(Game));
//            //input_manager = Game.Services.GetService(typeof(IInputManager)) as IInputManager;

//            input_manager.OnTap += on_tap;
//            //input_manager.OnDrag += on_drag;
//            //input_manager.OnHorizontalDrag += on_drag;
//            //input_manager.OnVerticalDrag += on_drag;
//            //input_manager.OnDragCompleted += on_drag_completed;
//            base.Initialize();
//        }
//        Texture2D bg, background, titlebg, leftArrow, rightArrow, backArrow;
//        int fonttitle_y = 180;
//        int dimtitle_y = 225;
//        int resettitle_y = 276;
//        int soundtitle_y = 326;
//        int title_w = 340;
//        int row_h = 46;
//        int leftArrow_x = 354;
//        int fontvalue_y = 191;
//        int rightArrow_x = 582;
//        int dimvalue_y = 241;
//        int status_x = 354;
//        int status_w = 248;
//        int status_h = 34;
//        int resetstatus_y = 286;
//        int soundstatus_y = 335;
//        bool showPopup;
//        Texture2D popup_t, button_ring, popup_back, back_b, button_light, logo, button;
//        Rectangle popup_r = new Rectangle(225, 107, 351, 267);
//        OptionsButton popupback, popupcontinue, popuptext;
//        protected override void LoadContent()
//        {
//            showPopup = false;
//            whiteTexture = Game.Content.Load<Texture2D>("Definitivo/popup_read_body");
//            //boxTexture = Game.Content.Load<Texture2D>("Textures/Menu/box");
//            //titlebg = Game.Content.Load<Texture2D>("Textures/Menu/optionTitleBg");
//            leftArrow = Game.Content.Load<Texture2D>("Definitivo/leftArrow");
//            rightArrow = Game.Content.Load<Texture2D>("Definitivo/rightArrow");
//            popup_t = Game.Content.Load<Texture2D>("Definitivo/popup_read_body");
//            button_ring = Game.Content.Load<Texture2D>("Definitivo/button_ring");
//            popup_back = Game.Content.Load<Texture2D>("Definitivo/popup_back");
//            back_b = Game.Content.Load<Texture2D>("Definitivo/small_back");
//            button = Game.Content.Load<Texture2D>("Definitivo/menu_button");

//            extralarge = Game.Content.Load<SpriteFont>("Fonts/menu");
//            large = Game.Content.Load<SpriteFont>("Fonts/menu_medio");
//            medium = Game.Content.Load<SpriteFont>("Fonts/menu_piccolo");
//            small = Game.Content.Load<SpriteFont>("Fonts/menu_piccolo");
//            //bg = Game.Content.Load<Texture2D>("Textures/Menu/optionsBG");

//            background = Game.Content.Load<Texture2D>("Definitivo/background");
//            logo = Game.Content.Load<Texture2D>("Definitivo/background_er_logo2");
//            button_light = Game.Content.Load<Texture2D>("Definitivo/option_sel2");


//            savedOptions = OptionsMenu.GetSavedOptions();
//            //back = new OptionsButton(new Rectangle(0, 700, 480, 100), Lang.MM_Back, Color.Red, large);
//            back = new OptionsButton(new Rectangle(0, 0, 50, 50),back_b, Color.White);
//            title = new OptionsButton(new Rectangle(92, 81, 237, 67), Lang.MM_Options, Color.White, extralarge, TextPos.Left, titlebg, Color.White);

//            soundText = new OptionsButton(new Rectangle(0, soundtitle_y, title_w, row_h), Lang.MM_SoundStatus, Color.White, medium, TextPos.Right);
//            soundStatus = new OptionsButton(new Rectangle(status_x, soundstatus_y, status_w, status_h), savedOptions.soundEnabled ? Lang.MM_ON : Lang.MM_Off, Color.White, medium, TextPos.Center);


//            font_title = new OptionsButton(new Rectangle(0,fonttitle_y, title_w, row_h), Lang.MM_Font, Color.White, medium, TextPos.Right);
//            dim_title = new OptionsButton(new Rectangle(0, dimtitle_y, title_w, row_h), Lang.MM_Dimension, Color.White, medium, TextPos.Right);

//            reset_title = new OptionsButton(new Rectangle(0, resettitle_y, title_w, row_h), Lang.MM_ResetState, Color.White, medium, TextPos.Right);

//            reset_b = new OptionsButton(new Rectangle(status_x, resetstatus_y, status_w, status_h), Lang.MM_Reset, Color.White, medium);

//            prevFont = new OptionsButton(new Rectangle(leftArrow_x, fontvalue_y, 25, 25), leftArrow, Color.White);
//            prevDim = new OptionsButton(new Rectangle(leftArrow_x, dimvalue_y, 25, 25), leftArrow, Color.White);
//            nextFont = new OptionsButton(new Rectangle(rightArrow_x, fontvalue_y, 25, 25), rightArrow, Color.White);
//            nextDim = new OptionsButton(new Rectangle(rightArrow_x, dimvalue_y, 25, 25), rightArrow, Color.White);
//            fonts = new List<SpriteFont>();
//            dims = availableScales();
//            var f = OptionsMenu.availableFonts();
//            for(int i=0;i<f.Count;i++)
//                try
//                {
//                    fonts.Add(Game.Content.Load<SpriteFont>("Fonts/Usable/" + f[i]+"14pt"));
//                }
//                catch (ContentLoadException e) { e.ToString(); }

//            if (savedOptions.font < 0 || savedOptions.font >= fonts.Count)
//                savedOptions.font = 0;
            
//            if (savedOptions.scale < 0 || savedOptions.scale >= dims.Count)
//                savedOptions.scale = 0;
            

            

//            //font_drag_rect = new Rectangle(font_x, buttons_y, buttons_w, 480 - buttons_y);
//            //scale_drag_rect = new Rectangle(scale_x, buttons_y, buttons_w, 480 - buttons_y);

//            //font_container = new Rectangle(status_x - 5, fontvalue_y - 5, status_w + 10, status_h + 10);
//            //scale_container = new Rectangle(status_x - 5, fontvalue_y - 5, status_w + 10, status_h + 10);

//            //font_drag_rect = new Rectangle(status_x, fontvalue_y, status_w, status_h);
//            //scale_drag_rect = new Rectangle(status_x, dimvalue_y, status_w, status_h);

//            //fonts_b = new List<OptionsButton>();
//            //dims_b = new List<OptionsButton>();

//            //for (int i = 0; i < savedOptions.font; i++)
//            //{
//            //    var b = new OptionsButton(new Rectangle(status_x - (savedOptions.font - i) * status_w, fontvalue_y, status_w, status_h),
//            //        f[i], Color.White, fonts[i]);
//            //    b.index = i;
//            //    fonts_b.Add(b);
//            //}
//            //for (int i = savedOptions.font; i < fonts.Count; i++)
//            //{
//            //    var b = new OptionsButton(new Rectangle(status_x + (i - savedOptions.font) * status_w, fontvalue_y, status_w, status_h),
//            //        f[i], Color.White, fonts[i]);
//            //    b.index = i;
//            //    fonts_b.Add(b);
//            //}

//            //for (int i = 0; i < savedOptions.scale; i++)
//            //{
//            //    var b = new OptionsButton(new Rectangle(status_x - (savedOptions.scale - i) * status_w, dimvalue_y, status_w, status_h),
//            //        "" + dims[i], Color.White, small);
//            //    b.index = i;
//            //    dims_b.Add(b);
//            //}
//            //for (int i = savedOptions.scale; i < dims.Count; i++)
//            //{
//            //    var b = new OptionsButton(new Rectangle(status_x + (i - savedOptions.scale) * status_w, dimvalue_y, status_w, status_h),
//            //        "" + dims[i], Color.White, small);
//            //    b.index = i;
//            //    dims_b.Add(b);
//            //}
//            //vel_font = vel_dim = 0;

//            fonts_b = new List<OptionsButton>();
//            dims_b = new List<OptionsButton>();
//            for (int i = 0; i < fonts.Count; i++)
//            {
//                var b = new OptionsButton(new Rectangle(status_x, fontvalue_y-4, status_w, status_h),
//                    f[i], Color.White, fonts[i]);
//                b.index = i;
//                fonts_b.Add(b);
//            }
//            for (int i = 0; i < dims.Count; i++)
//            {
//                var b = new OptionsButton(new Rectangle(status_x, dimvalue_y-5, status_w, status_h),
//                    "" + dims[i], Color.White, small);
//                b.index = i;
//                dims_b.Add(b);
//            }

//            popupback = new OptionsButton(new Rectangle(237, 121, 51, 46), whiteTexture, Color.White * 0);
//            popupcontinue = new OptionsButton(new Rectangle(303, 261, 141, 40), Lang.MM_Continue, Color.Black, medium);
//            popuptext = new OptionsButton(new Rectangle(296, 174, 240, 70), Lang.MM_ResetBookmarks + "\n" + Lang.MM_ToDefault, Color.Black, medium, TextPos.Left);

//            base.LoadContent();
//        }
//        float vel_font, vel_dim;
//        public override void Update(GameTime gameTime)
//        {
//            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
//            {
//                if (showPopup)
//                {
//                    showPopup = false;
//                    return;
//                }
//                OptionsMenu.SaveSavedOptions(savedOptions);
//                ScreenManager.SelectMainMenu(Game);
//                return;
//            }
//            soundStatus.text = savedOptions.soundEnabled ? Lang.MM_ON : Lang.MM_Off;
//            var dt = (float)gameTime.ElapsedGameTime.TotalSeconds;

//            vel_font = updateList(dt, vel_font, fonts_b);
            
//            vel_dim = updateList(dt, vel_dim, dims_b);

//            if(vel_font!=0)
//                for(int i=0;i<fonts_b.Count;i++)
//                    if (font_container.Contains(fonts_b[i].rectangle))
//                    {
//                        savedOptions.font = fonts_b[i].index;
                        
//                    }

//            if (vel_dim != 0)
//                for (int i = 0; i < dims_b.Count; i++)
//                    if (scale_container.Contains(dims_b[i].rectangle))
//                    {
//                        savedOptions.scale = dims_b[i].index;
                        
//                    }

//            base.Update(gameTime);
//        }
//        Rectangle font_container, scale_container; 
//        float updateList(float dt, float velocity, List<OptionsButton> list)
//        {
//            if (velocity != 0)
//            {
//                if (velocity < 0)
//                {
//                    velocity += dt;
//                    if (velocity > 0)
//                        velocity = 0;
//                }
//                else
//                {
//                    velocity -= dt;
//                    if (velocity < 0)
//                        velocity = 0;
//                }

//            }
//            if (velocity != 0)
//            {
//                //var upper_y = buttons_y + list.Count * buttons_h;
//                var delta_x = (int)velocity/5;

//                if (list[list.Count - 1].rectangle.X + delta_x < status_x)
//                {
//                    delta_x = list[list.Count - 1].rectangle.X - status_x;
//                    velocity = 0;
//                }
//                else
//                    if (list[0].rectangle.X + delta_x > status_x)
//                    {
//                        delta_x = list[0].rectangle.X - status_x;
//                        velocity = 0;
//                    }

//                for (int i = 0; i < list.Count; i++)
//                {
//                    list[i].rectangle.X += delta_x;
//                    list[i].position.X += delta_x;
//                }

//            }
//            return velocity;
//        }

        
//        Rectangle bgRect = new Rectangle(0, 0, 800, 480);
//        public override void Draw(GameTime gameTime)
//        {
//            GraphicsDevice.Clear(Color.Black);
//            sprite_batch.Begin();
//            sprite_batch.Draw(background, bgRect, Color.White);
//            sprite_batch.Draw(logo, bgRect, Color.White);

//            sprite_batch.Draw(button, new Vector2(93, 81), Color.White);
//            sprite_batch.Draw(button_light, new Vector2(382,190), Color.White);
//            sprite_batch.Draw(button_light, new Vector2(382, 240), Color.White);
//            //sprite_batch.Draw(popup_back, bgRect, Color.White);
//            //for (int i = 0; i < fonts_b.Count; i++)
//            //    fonts_b[i].Draw(sprite_batch);
//            //for (int i = 0; i < dims_b.Count; i++)
//            //    dims_b[i].Draw(sprite_batch);
//            fonts_b[savedOptions.font].Draw(sprite_batch);
//            dims_b[savedOptions.scale].Draw(sprite_batch);

//            //sprite_batch.Draw(bg2, bgRect, Color.White);

//            if(savedOptions.font>0)
//                prevFont.Draw(sprite_batch);
//            if(savedOptions.font<fonts_b.Count-1)
//                nextFont.Draw(sprite_batch);
//            if(savedOptions.scale>0)
//                prevDim.Draw(sprite_batch);
//            if(savedOptions.scale<dims_b.Count-1)
//                nextDim.Draw(sprite_batch);

//            back.Draw(sprite_batch);
//            title.Draw(sprite_batch);

//            font_title.Draw(sprite_batch);
//            dim_title.Draw(sprite_batch);
//            reset_title.Draw(sprite_batch);
//            reset_b.Draw(sprite_batch);
//            soundText.Draw(sprite_batch);
//            soundStatus.Draw(sprite_batch);

//            if (showPopup)
//            {
//                sprite_batch.Draw(popup_back, bgRect, Color.White);
//                sprite_batch.Draw(popup_t, popup_r, Color.White);
//                sprite_batch.Draw(button_ring, new Vector2(302,262), Color.White);
//                sprite_batch.Draw(back_b, new Vector2(244, 126), Color.White);
//                popupcontinue.Draw(sprite_batch);
//                popuptext.Draw(sprite_batch);
//            }

//            sprite_batch.End();
//            base.Draw(gameTime);
//        }
//        Point tp = new Point();
//        void deleteBookmarks()
//        {
//            var currentState = Game.Services.GetService(typeof(State)) as State;
//            if (currentState != null)
//            {
//                foreach (var book in currentState.booksList)
//                    book.bookmarksList.Clear();
//                if (currentState.currentBook != null)
//                    currentState.currentBook.bookmarksList.Clear();
//                currentState.SaveState();
//            }
//            showPopup = false;
//        }

//        void on_tap(Vector2 tap_position)
//        {

//            tp.X = (int)tap_position.X;
//            tp.Y = (int)tap_position.Y;

//            if (showPopup)
//            {
//                if (popupback.tapped_on(tp))
//                    showPopup = false;
//                else if (popupcontinue.tapped_on(tp))
//                    deleteBookmarks();
//            }
//            else
//            {

//                if (back.tapped_on(tp))
//                {
//                    OptionsMenu.SaveSavedOptions(savedOptions);
//                    ScreenManager.SelectMainMenu(Game);
//                    return;
//                }
//                else if (soundStatus.tapped_on(tp))// && savedOptions.soundEnabled)
//                {
//                    savedOptions.soundEnabled = !savedOptions.soundEnabled;
//                }
//                else if (prevFont.tapped_on(tp) && savedOptions.font > 0)
//                    savedOptions.font--;
//                else if (nextFont.tapped_on(tp) && savedOptions.font < fonts_b.Count - 1)
//                    savedOptions.font++;
//                else if (prevDim.tapped_on(tp) && savedOptions.scale > 0)
//                    savedOptions.scale--;
//                else if (nextDim.tapped_on(tp) && savedOptions.scale < dims_b.Count - 1)
//                    savedOptions.scale++;
//                else if (reset_b.tapped_on(tp))
//                    showPopup = true;
//            }
//        }
//        Vector2 old_drag_pos = Vector2.Zero;
//        Rectangle font_drag_rect, scale_drag_rect;
//        Point dp = new Point();
//        //int destination, direction;
//        int MAX_VEL = 20;
//        void on_drag(Vector2 drag_pos)
//        {
//            //if (current_drag != DragType.None) return;
//            if (old_drag_pos != Vector2.Zero)
//            {
//                //float dist = Vector2.Distance(old_drag_pos, drag_pos);
//                float dist_x = old_drag_pos.X - drag_pos.X;
//                float dist_y = old_drag_pos.Y - drag_pos.Y;
//                if (Math.Abs(dist_x) <= 5 || Math.Abs(dist_y) >= 5)
//                    return;
                
//                var center = Vector2.Lerp(old_drag_pos, drag_pos, 0.5f);
//                dp.X = (int)center.X;
//                dp.Y = (int)center.Y;
//                if (font_drag_rect.Contains(dp))
//                {
//                    vel_font -= dist_x*2;
//                    if (vel_font > 0)
//                        vel_font = Math.Min(vel_font, MAX_VEL);
//                    else
//                        vel_font = Math.Max(vel_font, -MAX_VEL);
//                }
//                else if (scale_drag_rect.Contains(dp))
//                {
//                    vel_dim -= dist_x*2;
//                    if (vel_dim > 0)
//                        vel_dim = Math.Min(vel_dim, MAX_VEL);
//                    else
//                        vel_dim = Math.Max(vel_dim, -MAX_VEL);
//                }
                
//            }
//            old_drag_pos = drag_pos;
//        }

//        void on_drag_completed()
//        {
//            old_drag_pos = Vector2.Zero;
//            vel_font = vel_dim = 0;
//        }

//        public static List<String> availableFonts()
//        {
//            return new List<string>()
//            {
//                "TimesNewRoman",
//                "Arial",
//                "SegoeWP",
//                "Orator"
//            };
//        }
//        public static List<String> availableScales()
//        {
//            return new List<String>(){
//                "10pt", "12pt", "14pt", "16pt"
//            };
//        }
//        public static Vector2 centerString(Rectangle rectangle, string text, SpriteFont spriteFont)
//        {
//            Vector2 destinazione = new Vector2();
//            if (text == null || text == "") return new Vector2(rectangle.Center.X, rectangle.Center.Y);
//            Vector2 dimStringa = spriteFont.MeasureString(text);

//            destinazione.X = rectangle.X + rectangle.Width / 2 - dimStringa.X / 2;
//            destinazione.Y = rectangle.Y + rectangle.Height / 2 - dimStringa.Y / 2;

//            return destinazione;
//        }

//        public static Vector2 centerString(Rectangle rectangle, string text, SpriteFont spriteFont, float scale)
//        {
//            Vector2 destinazione = new Vector2();
//            if (text == null || text == "") return new Vector2(rectangle.Center.X, rectangle.Center.Y);
//            Vector2 dimStringa = spriteFont.MeasureString(text) * scale;

//            destinazione.X = rectangle.X + rectangle.Width / 2 - dimStringa.X / 2;
//            destinazione.Y = rectangle.Y + rectangle.Height / 2 - dimStringa.Y / 2;

//            return destinazione;
//        }

//        #region save and load settings
//        private static Func<StreamReader, SavedOptions> read_saved_options = reader =>
//        {
//            SavedOptions so = new SavedOptions();

//            var s = reader.ReadToEnd();
//            var r = s.Split(new[] { ';' });
//            so.font = int.Parse(r[0]);
//            so.scale = int.Parse(r[1]);
//            so.soundEnabled = bool.Parse(r[2]);
//            return so;
//        };

//        private static Action<StreamWriter, SavedOptions> write_saved_options = (writer, entry) =>
//        {
//            var s = "" + entry.font + ";" + entry.scale + ";" + entry.soundEnabled;
//            writer.Write(s);
//        };


//        public static void SaveSavedOptions(SavedOptions entry)
//        {
//            try
//            {
//                using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication())
//                {
//                    appStorage.DeleteFile("options.txt");
//                    using (var streamFile = appStorage.OpenFile("options.txt", FileMode.OpenOrCreate))
//                    using (var writer = new StreamWriter(streamFile))
//                        write_saved_options(writer, entry);
//                }
//            }
//            catch (Exception e) { e.ToString(); }
//        }



//        public static SavedOptions ResetSavedOptions()
//        {
//            var so = new SavedOptions();
//            SaveSavedOptions(so);
//            return so;
//        }

//        public static SavedOptions GetSavedOptions()
//        {

//            using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication())
//            {
//                using (var streamFile = appStorage.OpenFile("options.txt", FileMode.OpenOrCreate))
//                {
//                    try
//                    {
//                        using (var reader = new StreamReader(streamFile))
//                            return read_saved_options(reader);
//                    }
//                    catch (Exception) { return ResetSavedOptions(); }
//                }
//            }


//        }
//#endregion
//    }
//}
